SineNoise : SimpleSynthDescriptor{
	

	createGuiControls{	
		this.put(\basePitch, c.new(default: 200, max: 10000, min: 50, theLog: 3) );
		this.put(\freq, c.new(default: 10, max: 100, min: 0.5, postLaunch: true) );
		this.put(\intensity, c.new(default: 10, max: 100, min: 0, postLaunch: true) );
		this.put(\verbDecay, c.new(default: 1, max: 5, min: 0) );
		this.put(\verbDelay, c.new(default: 0.05, max: 0.1, min: 0) );
		
	}
	
	*playSound{|args, subGroup, buffer|
		ArrayUtils.getValueFromSynthArgs(args, \busNum);
		super.playSound(args, subGroup, buffer);
		ArrayUtils.setValueInSynthArgs(args, \decay, 
			ArrayUtils.getValueFromSynthArgs(args, \decay) + 
			1.5 + 
			ArrayUtils.getValueFromSynthArgs(args, \verbDecay) +
			ArrayUtils.getValueFromSynthArgs(args, \verbDelay)
		);
	
	}
	
	*loadSynth{
	
		
		SynthDef(
					
			this.getSynthName,
			{ 
				arg basePitch = 200, freq = 10, intensity = 10, attack, len, decay, verbDecay = 1, verbDelay = 0.050, busNum;
				var pitchOsc, bigAmpEnv, bigAmpEnv2, wet1, wet2, dry;
				
				attack = attack * 0.9;
				len = len * 0.9;
				decay = decay * 0.9;
				
				bigAmpEnv =  EnvGen.kr(Env.linen(attack, len, decay));
				
				pitchOsc = SinOsc.kr(freq, mul: intensity, add: basePitch );
				
				dry =   SinOsc.ar( pitchOsc) * bigAmpEnv ;
					
				wet1 = dry;
				wet2 = dry;	
				
				5.do({ wet1 = AllpassN.ar(wet1, verbDelay, 0.05.rand, verbDecay)});
				5.do({ wet2 = AllpassN.ar(wet2, verbDelay, 0.05.rand, verbDecay)});
				
				Out.ar(busNum, [wet1, wet2]);
				
				
			}
			
		).load(Server.default);
	
	}

}